#include <iostream>
#include <boost/integer.hpp>



int main( /* int argc, char* argv[] */ )
{
	typedef boost::uint_t<24>::fast uint24_t;


	uint24_t x0 = 0;
	uint24_t x1 = 16777215;
	uint24_t x2 = 16777216;

	uint24_t x3 = 4294967295;
	uint24_t x4 = 4294967296;


	int Bits = 24;
	int xxx = 
	5 +
#ifdef BOOST_HAS_LONG_LONG
		(Bits-1 <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +
#else
		1 +
#endif
		(Bits <= ::std::numeric_limits<unsigned long>::digits) +
		(Bits <= ::std::numeric_limits<unsigned int>::digits) +
		(Bits <= ::std::numeric_limits<unsigned short>::digits) +
		(Bits <= ::std::numeric_limits<unsigned char>::digits);



	std::cout << typeid(x0).name() << std::endl;

	return 0;
}
